package com.ruoyi.order.es;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.math.BigDecimal;
import java.util.Date;

@Data
@Document(indexName = "order_index",shards = 1,replicas = 1)
public class OrderEs {
    private static final long serialVersionUID = 1L;

    /** 订单ID */
    @Id // ES 中的主键标识
    @Field(type = FieldType.Long)
    private Long orderId;

    /** 订单状态 */
    @Field(type = FieldType.Long)
    private Long orderStatus;

    /** 订单金额 */
    @Field(type = FieldType.Double) // 若要精确存储 BigDecimal，可结合 scalingFactor，也可用 Double 等类型按需调整
    private BigDecimal orderAmount;

    /** 服务时长（分钟，如 90） */
    @Field(type = FieldType.Long)
    private Long serviceDuration;

    /** 服务里程（公里，如 30） */
    @Field(type = FieldType.Long)
    private Long serviceMileage;

    /** 支付模式：微信支付、支付宝等，这里存 Long 可能不合理，通常可存 String 表示具体支付方式，若存 Long 是关联字典等，按需调整类型 */
    @Field(type = FieldType.Long)
    private Long paymentMode;

    /** 服务类型：预约订单、实时订单，同理，存 Long 不太直观，可考虑存 String，若业务是关联字典用 Long 则按需 */
    @Field(type = FieldType.Long)
    private Long serviceName;

    /** 车辆级别：舒适型、豪华型等，同样，存 Long 可关联字典，也可存 String 直接表示 */
    @Field(type = FieldType.Long)
    private Long carLevel;

    /** 上车地址 */
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String pickupAddress;

    /** 下车地址 */
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String dropoffAddress;

    /** 用车时间 */
    @Field(type = FieldType.Date, format = {}, pattern = "yyyy-MM-dd HH:mm:ss") // 日期格式，默认可识别常见格式，也可指定 format，如 format = { "yyyy-MM-dd" }
    private Date useTime;

    /** 支付时间 */
    @Field(type = FieldType.Date, format = {}, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date paymentTime;

    /** 下单来源：自有订单-IOS-iPhone X、自有订单-安卓-4.0 等，存 Long 不合理，改为存 String 更合适 */
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String source;
}
